const { Controller } = require("egg");

class BlogController extends Controller {
    /**
     * 博客列表
     */
    async index() {
        // 调用 service 层，获取博客列表数据
        const blogs = await this.service.blog.readList();

        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                list: blogs,
            },
            message: "请求博客列表成功",
        };
    }

    /**
     * 添加博客
     */
    async create() {
        // 解析请求体
        const { title, content } = this.ctx.request.body;
        // 非空校验
        if (!title || !content) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
        }
        // 从 ctx 获取登录用户的 id
        const uid = this.ctx.user.id;
        // 添加这篇博客
        const res = await this.service.blog.create({ title, content, uid });
        // 判断是否插入成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "添加失败，请稍后再试，或者联系管理员：13811065680",
            };
            return;
        }
        // 添加成功
        this.ctx.body = {
            code: 201,
            message: "添加成功",
        };
    }

    /**
     * 删除博客
     */
    async delete() {
        // 解析路径参数
        const { bid } = this.ctx.params;
        // 获取当前登录用户信息
        const { id } = this.ctx.user;
        // 查询博客
        const blog = await this.service.blog.find(bid);
        // 如果不存在
        if (!blog) {
            this.ctx.body = {
                code: 404,
                message: "不存在该博客",
            };
            return;
        }
        // 非本人发表的博客不能删除
        if (blog.uid !== id) {
            this.ctx.body = {
                code: 403,
                message: "你无权删除该博客",
            };
            return;
        }
        // 删除博客
        const res = await this.service.blog.remove(bid);
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "删除失败",
            };
            return;
        }
        // 删除成功
        this.ctx.body = {
            code: 204,
            message: "删除成功",
        };
        return;
    }

    /**
     * 获取博客详情
     */
    async detail() {
        // 获取路径参数
        const { id } = this.ctx.params;
        // 查询该博客
        const blog = await this.service.blog.find(id);
        console.log("id", id);
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: blog,
            message: "获取博客详情成功",
        };
    }
}

module.exports = BlogController;
